package cn.net.autocode.core.bean;


import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class ResultT implements Serializable {
    /**
     * 状态码
     */
    private int code;

    /**
     * 返回的信息
     */
    private String msg;

    private Object data;

    private JSONObject pageInfo;

    private ResultT(int code, String msg, JSONObject data){
        this.code = code;
        this.msg = msg;
        if(data==null){
            data = new JSONObject();
        }
        this.data = data;
    }

    private ResultT(int code, String msg, JSONArray data){
        this.code = code;
        this.msg = msg;
        if(data==null){
            data = new JSONArray();
        }
        this.data = data;
    }

    public JSONObject JSONObjectData(){
        if(data instanceof JSONObject){
            return (JSONObject) data;
        }else{
            throw new RuntimeException("返回数据为JSONArray类型");
        }
    }


    public JSONArray JSONArrayData(){
        if(data instanceof JSONArray){
            return (JSONArray) data;
        }else{
            throw new RuntimeException("返回数据为JSONObject类型");
        }
    }
    /**
     * 操作成功，且带有返回数据
     * @param data  返回的数据
     * @return ResultT实例
     */
    public static ResultT success(JSONObject data) {
        return new ResultT(1, "success", data);
    }

    public static ResultT success(JSONArray data) {
        return new ResultT(1, "success", data);
    }

    /**
     * 操作成功，没有返回数据
     * @return ResultT实例
     */
    public static ResultT success() {
        return new ResultT(1, "success", new JSONObject());
    }

    /**
     * 操作失败
     * @param msg  返回的消息信息
     * @return ResultT实例
     */
    public static ResultT fail(String msg) {
        return new ResultT(0, msg, new JSONObject());
    }


    /**
     * 设置返回的消息信息
     * @param msg  消息信息
     * @return ResultT实例
     */
    public ResultT msg(String msg){
        this.msg = msg;
        return this;
    }

    /**
     * 设置分页信息
     * @param pageInfo 分析信息
     * @return ResultT实例
     */
    public ResultT pageInfo(JSONObject pageInfo){
        this.pageInfo = pageInfo;
        return this;
    }

    public boolean isSuccess(){
        return this.code == 1;
    }

}
